<?php
/**
 * Page gestion des filières
 * Permet l'affichage, l'ajout, la suppression et la modification des filières
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class filiereAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des filières');
	$this->addAriane(shRequest::link('administration'), 'Administration');
    }

    /**
     * Affichage des filières
     */
    public function execute() {
	// Récupération des filieres
	$filieres = shSGBD::select('SELECT id,intitule FROM filiere ORDER BY intitule ASC');

	foreach ( $filieres AS &$filiere ) {
	    $filiere->specialites = shSGBD::select(
		    'SELECT id,intitule '.
		    'FROM specialite '.
		    'WHERE id_filiere=?', array($filiere->id)
	    );
	}

	$this->assign('filieres',$filieres);
    }
    /**
     * Modification d'une filiere
     * @param <integer> Identifiant de la filière à modifier
     */
    public function executeEdit($id_filiere) {
	$this->addAriane(shRequest::link('administration', 'filiere'), 'Gestion des filières');
	$this->setTitle('Modification d\'une filière');

	// On récupère le batiment
	$filiere = shSGBD::selectOne('SELECT id,intitule FROM filiere '.
		'WHERE id=?'
		,array($id_filiere));

	if (!$filiere) {
	    throw new Exception('La filière demandée n\'existe pas');
	    return false;
	}

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier cette filière');

	// Intitulé de la salle
	shField::text('Intitulé')
		->setValue($filiere->intitule)
		->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) use ($filiere) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'on a pas le même intitulé qui existe
			$salle = shSGBD::selectOne('SELECT count(id) AS count '.
				'FROM filiere '.
				'WHERE intitule=:intitule AND id!=:id ',
				array (':intitule'=>$formulaire->getField('Intitulé')->getValue(),
				':id'=>$filiere->id));
			if ($salle->count > 0) {
			    $formulaire->getField('Intitulé')->setError('Une autre filière possède le même intitulé');
			}
		    }
		})



	;

	$formulaire->setSubmit(function($formulaire) use ($filiere) {
		    // On crée le nouveau profil
		    shSGBD::update('UPDATE filiere SET intitule=:intitule '.
			    'WHERE id=:id',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue(),
			    ':id' => $filiere->id));
		    shAction::redirect('administration','filiere');
		})



	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Ajout d'un batiment
     */
    public function executeCreate() {
	$this->addAriane(shRequest::link('administration', 'filiere'), 'Gestion des filières');
	$this->setTitle('Ajout d\'une filière');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Ajouter cette filière');

	// Intitulé de la salle
	shField::text('Intitulé')->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'on a pas le même intitulé qui existe
			$salle = shSGBD::selectOne('SELECT count(id) AS count '.
				'FROM filiere '.
				'WHERE intitule=:intitule',
				array (':intitule'=>$formulaire->getField('Intitulé')->getValue()));
			if ($salle->count > 0) {
			    $formulaire->getField('Intitulé')->setError('Une autre filière possède le même intitulé');
			}
		    }
		})



	;

	$formulaire->setSubmit(function($formulaire) {
		    // On crée le nouveau profil
		    shSGBD::update('INSERT INTO filiere (intitule) VALUES (:intitule ) ',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue()));
		    shAction::redirect('administration','filiere');
		})



	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Suppression d'une filiere
     * @param <integer> Identifiant de la filière à supprimer
     * @todo Faire le remplacement en salle xxx des salles liées a des cours ou autre
     */
    public function executeDelete($id_filiere) {
	$this->addAriane(shRequest::link('administration', 'filiere'), 'Gestion des filières');
	$this->setTitle('Suppression d\'une filière');

	//  Supprimer une filière a un impact sur
	//  -- Specialite
	//	--  Promotion
	//	    --	Responsable
	//	    --	Assister
	//	    --	Groupe
	//	    --	Jours_desactives_promotion
	//	    --	Mutualiser

	// On récupère toutes les spécialités de la filière
	$specialites = shSGBD::select('SELECT id FROM specialite WHERE id_filiere=?',array($id_filiere));
	if (!empty($specialites)) {
	    $idSpecialites = array();
	    foreach ($specialites as $specialite) {
		$idSpecialites[] = $specialite->id;
	    }

	    // On récupère toutes les promotions des spécialités
	    $promotions = shSGBD::select('SELECT id FROM promotion '.
		    'WHERE id_specialite IN (?'.str_repeat(',? ', sizeof($idSpecialites) - 1).') '
		    ,$idSpecialites);

	    // On supprime chaque promotion
	    foreach ($promotions as $promotion){
		 $this->call('promotion','delete',array($promotion->id));
	    }

	    // On peut supprimer les spécialités maintenant
	    shSGBD::delete('DELETE FROM specialite '.
		    'WHERE id IN (?'.str_repeat(',? ', sizeof($idSpecialites) - 1).') '
		    ,$idSpecialites);
	}

	// Ensuite on termine la suppression du batiment
	shSGBD::delete('DELETE FROM filiere WHERE id=?',array($id_filiere));

	// On retourne sur la page
	shAction::redirect('administration','filiere');
    }
}
?>